<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
  
    // 用户 
    // 由 数字 字母 下划线 组成,6-12位

    // 字符匹配符  => 可以理解为就是一个集合
    // [xzy]    匹配集合中的任意一个字符
    // [0123456789]  => [0-9]  匹配数字
    // [QWERTYUIOPASDFGHJKLZXCVBNM] => [A-Z]  匹配大写
    // [qwertyuiopasdfghjklzxcvbnm] => [a-z]  匹配小写
    // [0-9A-Za-z_]          匹配 数字 字母 下划线 

    // 取反       
    // [^0-9]          匹配非数字 (除数字以外的任意字符)
    // [^0-9A-Za-z_]   匹配非 数字 字母 下划线

    // 注意: ^ 在字符匹配符中 表示取反
    //       在字符匹配符中 除了[ ] ^ - 字符簇以外,其他的都是普通字符

    // 字符簇 (正则表达式中既定集合)
    // \d    匹配数字 (等价于  [0-9])
    // \D    匹配非数字 (等价于  [^0-9])
    // \w    匹配 数字,字母,下划线   (等价于  [0-9A-Za-z_])
    // \W    匹配非 数字,字母,下划线   (等价于  [^0-9A-Za-z_])
    // \s    匹配空白字符 (空格 换行 回车产生的)  [\n\f\r\t\v]
    // \S    匹配非空白字符   [^\n\f\r\t\v]
    // .     匹配除换行符以外的其他字符  [^\n]
    // [\u4e00-\u9fa5]   匹配中文


    // var str = "xyzwx";
    // var reg = /^[xyz]{2,5}$/;  //  由xyz组成,2-5位
    // console.log(reg.test(str));

    // 用户名
    // 由 数字 字母 下划线 组成,6-12位, 且不能以数字开头

    var str = "a1231+23"; 
    // var reg = /^[0-9A-Za-z_]{6,12}$/;   //由 数字 字母 下划线 组成,6-12位,
    // var reg = /^[^0-9][0-9A-Za-z_]{5,11}$/;   //且不能以数字开头 (除数字以外的任意字符)
    var reg = /^[A-Za-z_][0-9A-Za-z_]{5,11}$/;   // 

    //由 数字 字母 下划线  $ 组成
    var reg = /^[A-Za-z_$][\w$]{5,11}$/;
    
    //由 数字 字母 下划线  $ 中文 组成
    var reg = /^[A-Za-z_$\u4e00-\u9fa5][\w$\u4e00-\u9fa5]{5,11}$/;

    console.log(reg.test(str));

</script>
</html>